/**
 *  定义数据库连接
 *  rewrite by lihao on 2018-04-18
 */
const mysql = require('mysql');
const Tools = require('../util');
const fs = require('fs');

const aliyun = {
    host: 'bdm246562380.my3w.com',
    user: 'bdm246562380',
    password: 'p081742lh',
    database: 'bdm246562380_db',
    multipleStatements: true,
    debug: false
};
const pro_local = {
    host: '172.18.51.251',
    user: 'dev',
    password: 'p081742lh^DEV',
    database: 'byjs',
    multipleStatements: true,
    debug: false
};

const pro = {
    host: '47.106.79.133',
    user: 'dev',
    password: 'p081742lh^DEV',
    database: 'byjs',
    multipleStatements: true,
    debug: false
};

/**
 *   @param multipleStatements 用于开启可以传多个值，
 *   @param debug  为true时开启调试模式
 */

console.log('环境变量', process.argv[2]);

const pool = mysql.createPool(aliyun);

/**
 *  通过链接池链接数据库
 * @param sql      业务sql
 * @param params   业务sql需要的参数
 * @param res      用于处理链接并返回json参数
 *                  ---- 有 res 时 ，查询的结果用于返回给页面
 *                  ---- 无 res 时 ，用于后台自查询，对后面的数据进行下一步处理
 * @param info      用于接口提示信息
 */
function db(sql, params, res, info) {
  const p = params ? params:[];
  return new Promise(function(resolve,reject){
      try {
          pool.getConnection(function(err, con) {
              if (err) reject(err);

              const query = con.query({sql: sql, timeout: 40000}, p, function(err, data, fields) {
                  console.error('SQL',query.sql);
                  if(err){
                      const newTime = new Date();
                      const str = Tools.parseTime(newTime) +' ------ '+ err.code + ' ---- '+err.sqlMessage+' ---- '+err.sql+'\r\n';
                      // 保存错误日志
                      fs.open('conf/log.txt','a',function(){
                          fs.appendFile('conf/log.txt',str,function(err){})
                      });
                      reject(err);
                  }

                  con.release();

                  /**
                   *  根据是否有res值判断引用情况
                   *    1.有res   为接口调用
                   *    2.无res   为普通调用
                   */
                  if(res){
                      //  设置返回头
                      res.setHeader('Content-Type','application/json');
                      res.end(JSON.stringify(data))

                  } else {
                      resolve(data);
                  }
              })
          })

      } catch (err){
          console.log('DataBase Error', err);
          //  设置返回头
          let errObj = {
              success: false,
              message: 'DataBase Error',
              code: '30003'
          };
          res.setHeader('Content-Type','application/json');
          res.end(JSON.stringify(errObj))
      }
  })
}

module.exports = db;
